import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let textInputItems = [
    {
        "label": "TextInput_Create",
        "insertText": dedent`
        GUI:TextInput_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:width}, \${6:height}, \${7:fontSize})
        `,
        "documentation": dedent`# 创建输入框
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数     | 必选 | 类型   | 注释        |
        | :------- | :--- | :----- | :---------- |
        | parent   | 是   | obj    | 父节点对象  |
        | ID       | 是   | string | 唯一ID      |
        | x        | 是   | int    | 位置 横坐标 |
        | y        | 是   | int    | 位置 纵坐标 |
        | width    | 是   | int    | 宽度        |
        | height   | 是   | int    | 高度        |
        | fontSize | 是   | int    | 字体大小    |

        - 示例代码

        \`\`\`
        local TextField_input = GUI:TextInput_Create(parent, "TextField_input", 0, 0, 30, 33, 16)
        \`\`\`
        `
    },
    {
        "label": "TextInput_setFontColor",
        "insertText": dedent`
        GUI:TextInput_setFontColor(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框字体颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型   | 注释            |
        | :----- | :--- | :----- | :-------------- |
        | widget | 是   | obj    | 输入框对象      |
        | value  | 是   | string | 色值(“#000000”) |

        `
    },
    {
        "label": "TextInput_setFont",
        "insertText": dedent`
        GUI:TextInput_setFont(\${1:widget}, \${2:value}, \${3:value2})
        `,
        "documentation": dedent`# 设置输入框字体 [仅支持移动端设置]
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型   | 注释       |
        | :----- | :--- | :----- | :--------- |
        | widget | 是   | obj    | 输入框对象 |
        | value  | 是   | string | 字体路径   |
        | value2 | 是   | int    | 字号       |

        `
    },
    {
        "label": "TextInput_setFontSize",
        "insertText": dedent`
        GUI:TextInput_setFontSize(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框字体大小
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 输入框对象 |
        | value  | 是   | int  | 字号       |

        `
    },
    {
        "label": "TextInput_setPlaceholderFont",
        "insertText": dedent`
        GUI:TextInput_setPlaceholderFont(\${1:widget}, \${2:value}, \${3:value2})
        `,
        "documentation": dedent`# 设置输入框占位文本字体
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型   | 注释             |
        | :----- | :--- | :----- | :--------------- |
        | widget | 是   | obj    | 输入框对象       |
        | value  | 是   | string | 字体路径         |
        | value2 | 是   | string | 字体(“font.ttf”) |

        `
    },
    {
        "label": "TextInput_setPlaceholderFontColor",
        "insertText": dedent`
        GUI:TextInput_setPlaceholderFontColor(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框占位文本字体颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型   | 注释            |
        | :----- | :--- | :----- | :-------------- |
        | widget | 是   | obj    | 输入框对象      |
        | value  | 是   | string | 色值(“#000000”) |

        `
    },
    {
        "label": "TextInput_setPlaceholderFontSize",
        "insertText": dedent`
        GUI:TextInput_setPlaceholderFontSize(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框占位文本字体大小
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 输入框对象 |
        | value  | 是   | int  | 字号       |

        `
    },
    {
        "label": "TextInput_setPlaceHolder",
        "insertText": dedent`
        GUI:TextInput_setPlaceHolder(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框占位文本
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型   | 注释       |
        | :----- | :--- | :----- | :--------- |
        | widget | 是   | obj    | 输入框对象 |
        | value  | 是   | string | 输入内容   |

        `
    },
    {
        "label": "TextInput_setString",
        "insertText": dedent`
        GUI:TextInput_setString(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框文本
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型   | 注释       |
        | :----- | :--- | :----- | :--------- |
        | widget | 是   | obj    | 输入框对象 |
        | value  | 是   | string | 输入内容   |

        `
    },
    {
        "label": "TextInput_getString",
        "insertText": dedent`
        GUI:TextInput_getString(\${1:widget})
        `,
        "documentation": dedent`# 获取输入框文本
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 输入框对象 |

        `
    },
    {
        "label": "TextInput_setMaxLength",
        "insertText": dedent`
        GUI:TextInput_setMaxLength(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框行宽
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释           |
        | :----- | :--- | :--- | :------------- |
        | widget | 是   | obj  | 输入框对象     |
        | value  | 是   | int  | 输入框控件宽度 |

        `
    },
    {
        "label": "TextInput_setTextHorizontalAlignment",
        "insertText": dedent`
        GUI:TextInput_setTextHorizontalAlignment(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框水平对齐
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释                                    |
        | :----- | :--- | :--- | :-------------------------------------- |
        | widget | 是   | obj  | 输入框对象                              |
        | value  | 是   | int  | 对齐方式： 0 顶对齐 1 底对齐 2 水平居中 |

        `
    },
    {
        "label": "TextInput_setInputFlag",
        "insertText": dedent`
        GUI:TextInput_setInputFlag(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框文本类型
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 输入框对象 |
        | value  | 是   | int  | 类型       |

        - 类型如下

        \`\`\`
        0   -- 密码形式
        1   -- 敏感数据输入
        2   -- 每个单词首字符大写，并有提示
        3   -- 第一句首字符大写，并有提示
        4   -- 自动大写
        \`\`\`
        `
    },
    {
        "label": "TextInput_setInputMode",
        "insertText": dedent`
        GUI:TextInput_setInputMode(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框键盘编辑类型
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 输入框对象 |
        | value  | 是   | int  | 类型       |

        - 类型如下

        \`\`\`
        0   -- 开启任何文本的输入键盘(含换行)
        1   -- 开启邮箱地址输入类型键盘
        2   -- 开启数字符号输入类型键盘
        3   -- 开启电话号码输入类型键盘
        4   -- 开启URL输入类型键盘
        5   -- 开启数字输入类型键盘(含小数点)
        6   -- 开启任何文本的输入键盘(不含换行)
        \`\`\`
        `
    },
    {
        "label": "TextInput_setReturnType",
        "insertText": dedent`
        GUI:TextInput_setReturnType(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置输入框弹出式键盘返回类型
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 输入框对象 |
        | value  | 是   | int  | 类型       |

        `
    },
    {
        "label": "TextInput_addOnEvent",
        "insertText": dedent`
        GUI:TextInput_addOnEvent(\${1:widget}, \${2:eventCB})
        `,
        "documentation": dedent`# 设置输入框监听事件
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数    | 必选 | 类型     | 注释         |
        | :------ | :--- | :------- | :----------- |
        | widget  | 是   | obj      | 输入框对象   |
        | eventCB | 是   | function | 事件处理函数 |

        `
    },
    {
        "label": "TextInput_closeInput",
        "insertText": dedent`
        GUI:TextInput_closeInput(\${1:widget})
        `,
        "documentation": dedent`# 关闭输入框输入 [3.40.5版本]
        [在线文档](http://engine-doc.996m2.com/web/#/22/2166)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 输入框对象 |

        `
    }
]




export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    textInputItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
